home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Developer Essentials / DTS Sample Code / Snippets / Toolbox & IAC / Sound / WavePlay / WavePlay.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-01  |  5.7 KB  |  249 lines  |  [TEXT/MPS ]

  1. /*______________________________________________________*/
  2. /*                            C Shell                        */
  3. /*                          by                          */
  4. /*                  RICHARD P. COLLYER                  */
  5. /*                       09/02/87                       */
  6. /*______________________________________________________*/
  7.  
  8. #include    <Quickdraw.h>
  9. #include    <Windows.h>
  10. #include    <desk.h>
  11. #include    <Memory.h>
  12. #include    <Menus.h>
  13. #include    <OSEvents.h>
  14. #include    <Resources.h>
  15. #include    <SegLoad.h>
  16. #include    <Sound.h>
  17. #include    <ToolUtils.h>
  18.  
  19. extern _DataInit();
  20.  
  21. #define    TRUE            0xFF
  22. #define    FALSE            0
  23.  
  24. #define    appleID            128            
  25. #define    appleMenu        0
  26. #define    aboutMeCommand    1
  27.  
  28. #define    fileID            129
  29. #define    startCommand    1
  30. #define printCommand    3
  31. #define    quitCommand     5
  32.  
  33. #define    editID            130
  34.  
  35. int                    yieldTime, err;
  36. MenuHandle            mymenu1, mymenu2, mymenu0;
  37. EventRecord         myEvent;
  38. Boolean                DoneFlag;
  39. WindowPtr            whichWindow;
  40.     
  41. /*______________________________________________________*/
  42. /*                What ever You want                    */
  43. /*______________________________________________________*/
  44. void start()
  45. {
  46.     SndChannelPtr    chan;
  47.     SndCommand        mycmd;
  48.     long            count;
  49.     char            *wave;
  50.     int                i;
  51.     
  52.     /* This half of the routine demos the use of the waveTable feature */
  53.  
  54.     wave = (char *) NewPtr (512);
  55.     if (MemError() != noErr || wave == nil)
  56.         Debugger();
  57.         
  58.     chan = nil;
  59.     err = SndNewChannel (&chan, waveTableSynth, initChan0, nil);
  60.     if (err != noErr)
  61.         Debugger();
  62.         
  63.     for (i = 0; i <= 512; ++i)
  64.         wave[i] = (Random() + 32767)/267;
  65.     
  66.     mycmd.cmd = waveTableCmd;
  67.     mycmd.param1 = 512;
  68.     mycmd.param2 = &wave;
  69.     
  70.     err = SndDoImmediate (chan, &mycmd);
  71.     if (err != noErr)
  72.         Debugger();
  73.         
  74.     mycmd.cmd = freqCmd;
  75.     mycmd.param1 = 0;
  76.     mycmd.param2 = 60;
  77.     
  78.     err = SndDoImmediate (chan, &mycmd);
  79.     if (err != noErr)
  80.         Debugger();
  81.         
  82.     Delay (60, &count);
  83.         
  84.     err = SndDisposeChannel (chan,FALSE);
  85.     if (err != noErr)
  86.         Debugger();
  87.         
  88.     /* no I will play the same sound with the squareWaveSynth */
  89.     
  90.     chan = nil;
  91.     err = SndNewChannel (&chan, squareWaveSynth, 0, nil);
  92.     if (err != noErr)
  93.         Debugger();
  94.     
  95.     mycmd.cmd = freqCmd;
  96.     mycmd.param1 = 0;
  97.     mycmd.param2 = 60;
  98.     
  99.     err = SndDoImmediate (chan, &mycmd);
  100.     if (err != noErr)
  101.         Debugger();
  102.         
  103.     Delay (60, &count);
  104.         
  105.     err = SndDisposeChannel (chan,FALSE);
  106.     if (err != noErr)
  107.         Debugger();
  108.         
  109.     return;
  110. }
  111.  
  112. /*______________________________________________________*/
  113. /*                 About Prog Dialog                    */
  114. /*______________________________________________________*/
  115. void showAboutMeDialog()
  116. {
  117.     return;
  118. }
  119.  
  120. /*______________________________________________________*/
  121. /*                 Do Menu Function                     */
  122. /*______________________________________________________*/
  123. void doCommand(mResult)
  124.     long    mResult;
  125. {
  126.     int                     theMenu, theItem;
  127.     char                    daName[256];
  128.     GrafPtr                 savePort;
  129.  
  130.     theItem = LoWord(mResult);
  131.     theMenu = HiWord(mResult);
  132.     
  133.     switch (theMenu) {
  134. /*______________________________________________________*/
  135. /*                    Do Apple Menu                     */
  136. /*______________________________________________________*/
  137.         case appleID:
  138.             if (theItem == aboutMeCommand)
  139.                 showAboutMeDialog();
  140.             else {
  141.                 GetItem(mymenu0, theItem, daName);
  142.                 GetPort(&savePort);
  143.                 (void) OpenDeskAcc(daName);
  144.                 SetPort(savePort);
  145.             }
  146.             break;
  147. /*______________________________________________________*/
  148. /*                     Do File Menu                     */
  149. /*______________________________________________________*/
  150.         case fileID:
  151.             switch (theItem) {
  152.                 case startCommand:
  153.                     start();
  154.                     break;
  155.                 case printCommand:
  156.                     break;
  157.                 case quitCommand:
  158.                     DoneFlag = TRUE;
  159.                     break;
  160.                 default:
  161.                     break;
  162.                 }
  163.             break;
  164. /*______________________________________________________*/
  165. /*                     Do Edit Menu                     */
  166. /*______________________________________________________*/
  167.         case editID:
  168.             switch (theItem) {
  169.                 default:
  170.                     break;
  171.                 }
  172.             break;
  173.         default:
  174.             break;
  175.         }
  176.     HiliteMenu(0);
  177.     return;
  178. }
  179.  
  180. /*______________________________________________________*/
  181. /*               Initialization traps                   */
  182. /*______________________________________________________*/
  183. void init()
  184. {
  185.     UnloadSeg(_DataInit);
  186.     InitGraf(&qd.thePort);
  187.     FlushEvents(everyEvent, 0);
  188.     InitMenus();
  189.     InitCursor();
  190.     MaxApplZone();
  191. /*______________________________________________________*/
  192. /*                    Set menus                         */
  193. /*______________________________________________________*/
  194.     mymenu0 = GetMenu(appleID);
  195.     AddResMenu(mymenu0, 'DRVR');
  196.     InsertMenu(mymenu0,0);
  197.     mymenu1 = newmenu(129,"File");
  198.     appendmenu(mymenu1,"Start;-;Print;-;Quit");
  199.     InsertMenu(mymenu1,0);
  200.     mymenu2 = newmenu(130,"Edit");
  201.     InsertMenu(mymenu2,0);
  202.     DrawMenuBar();
  203.  
  204. /*______________________________________________________*/
  205. /*                  Init variables                      */
  206. /*______________________________________________________*/
  207.     DoneFlag = FALSE;
  208.     yieldTime = 0;
  209.     return;
  210. }
  211.  
  212. main()
  213. {
  214. /*______________________________________________________*/
  215. /*                   Main Event loop                    */
  216. /*______________________________________________________*/
  217.     init();
  218.     for ( ;; ) {
  219.         if (DoneFlag) {
  220.             ExitToShell();
  221.             }
  222.         if (WaitNextEvent(everyEvent, &myEvent, yieldTime, nil)) {
  223.             switch (myEvent.what) {
  224.                 case mouseDown:
  225.                     switch (FindWindow(myEvent.where, &whichWindow)) {
  226.                         case inSysWindow:
  227.                             SystemClick(&myEvent, whichWindow);
  228.                             break;
  229.                         case inMenuBar:
  230.                             doCommand(MenuSelect(myEvent.where));
  231.                             break;
  232.                         default:
  233.                             break;
  234.                         }
  235.                     break;
  236.                 case app4Evt:
  237.                     if ((myEvent.message << 31) == 0) { /* Suspend */
  238.                         yieldTime = 30;
  239.                         }
  240.                     else { /* Resume */
  241.                         yieldTime = 0;
  242.                         }
  243.                     break;
  244.                 default:
  245.                     break;
  246.                 }
  247.             }
  248.         }
  249. }